//way1:先合并在排序
﻿int cmp(void *pa,void *pb)
{
    return (*(int*)pa-*(int*)pb);
}
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
    for(int i=0;i<nums2Size;i++)
    {
        nums1[m++]=nums2[i];
    }
    qsort(nums1,nums1Size,sizeof(int),cmp);
    
}
//way2:


void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
   int arr[nums1Size];
   int i=0;  //遍历nums1
   int j=0;  //遍历nums2
   int ret=0; 
   if(n==0)  
   {
       return;
   }
   else if(m==0)
   {
       for(i=0;i<n;i++)
       nums1[i]=nums2[i];
   }
   else
   {
       i=0;
       while(i<m&&j<n)
    {
        if(nums1[i]<=nums2[j])
        {
            arr[ret]=nums1[i];
            i++;
            ret++;
        }
        else 
        {
            arr[ret]=nums2[j];
            j++;
            ret++;
        }
    }
          while (i < m) {
            arr[ret++] = nums1[i++];
        }
        while (j < n) {
            arr[ret++] = nums2[j++];
        }
    
    for(int i=0;i<ret;i++)
    {
        nums1[i]=arr[i];
    }


   }
     
}
//way3:
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
   int i1=m-1;
   int i2=n-1;
   int j=m+n-1;
   if(n==0)
   {
       return;
   }
   else if(m==0)
   {
       for(int i=0;i<nums2Size;i++)
       {
           nums1[i]=nums2[i];
       }
   }
   else
   {
    while(i1>=0&&i2>=0)
   {
       if(nums1[i1]>=nums2[i2])
       {
           nums1[j]=nums1[i1];
           i1--;
           j--;
       }
       else
       {
           nums1[j]=nums2[i2];
           i2--;
           j--;
       }
   }

   while(i2>=0)
   {
       nums1[j--]=nums2[i2--];
   }
  
   }
  
}